import { defineStore } from 'pinia'
import { ref } from 'vue'
import { submitOrder, orderWepay } from '@/api/order'
import { currRoute } from '@/utils'
import { emitter } from '@/utils/eventBus'

const orderInfo = ref<{
	[key: string]: any
}>({
	// 我的雪具id
	eq_id: '',
	// 雪具名称
	eq_name: '',
	// 雪具图片，多张图片以,分隔
	eq_photo: '',
	// 优惠券信息
	voucher_id: '',
	// 优惠券图片（改成优惠券码）
	v_photo: '',
	// 服务id
	service_id_lst: '',
	// 服务pid（pid为0的）
	service_pid_lst: '',
	// 合计总金额
	totalMoney: 0,
	// 选择的服务
	selectServices: [
		// {
		// 	// 服务pid（pid为0的）
		// 	service_pid: '',
		// 	// 择的对应服务目标 0=单板,1=双板,2=单双板,3=雪服
		// 	service_target: '',
		// 	// service_target 对应服务目标: 0=单板,1=双板,2=单双板,3=雪服
		// 	// extra_info 额外信息:0=温度,1=底刃,2=边刃,3-贴膜
		// 	// 选择的服务明细
		// 	selectItem: []
		// }
	],
	// 商户地址id
	shop_addr_id: '',
	// 用户地址id
	user_addr_id: '',
	// 选择的对应温度
	// temperature: [],
	// 选择的底刃、边刃(数据格式[['0.5', '89']])
	// thickness: [],
	// 送货方式 0快递；1自送；2上门取货
	kd_type: '0',
	// 快递方式（0快递；1自提；2店家送货）
	way: '0',
	// 商家取送运费（单程 50元，取送 80元）
	express_fee: 0,
	// 地区（0中环内；1外环内；2外环外）
	// area: 0,
	// 1微信支付 2次卡 3微信+次卡
	mode: '',
	// 使用次卡的服务列表id
	service_c_id_lst: []
})
// 选中的温度、底刃、边刃数据
const extraInfo = ref({})
// 选择的门店信息
const selectStore = ref<Record<string, any>>({})
export const useOrder = defineStore(
	'order',
	() => {
		const payLoading = ref(false)
		// 设置订单的信息
		const setOrderInfo = (data: AnyObject) => {
			orderInfo.value = {
				...orderInfo.value,
				...data
			}
		}
		// 设置温度、底刃、边刃数据
		const setExtraInfoStore = (data: any) => {
			extraInfo.value = data
		}
		// 设置选中的门店
		const setSelectStore = (data: AnyObject) => {
			selectStore.value = data
		}
		// 创建订单
		const confirmOrder = (data: AnyObject) => {
			submitOrder(data).then(res => {
				handlePay({
					...res,
					order_type: 0
				})
			}).finally(() => {
				// loading.value = false
			}).catch(() => {
				uni.hideLoading();
			})
		}
		// 校验是否是订单列表页
		function checkOrderListPage() {
			const page = currRoute()
			const bool = page.path === '/pages-sub/order/order-list'
			return bool
		}
		// 微信支付
		const handlePay = async(data: AnyObject) => {
			uni.showLoading({
				title: '检测支付环境...'
			});
			payLoading.value = true
			const res = await orderWepay({
				order_no: data.order_no,
				order_type: data.order_type
			}).finally(() => {
				payLoading.value = false
			})
			if (!res || !res.appId) return
	
			console.log('orderWepay', res)
			const orderInfo = {
				appid: res.appId,
				timeStamp: res.timestamp,
				nonceStr: res.noncestr,
				package: res.package,
				signType: res.signType,
				paySign: res.paySign,
			}
			uni.requestPayment({
				provider: 'wxpay',
				orderInfo: '',
				...orderInfo,
				debug: true,
				// ...orderInfo,
				success: (res) => {
					console.log('success:' + JSON.stringify(res));
				},
				fail: (err) => {
					console.log('fail:' + JSON.stringify(err));
				},
				complete: (res) => {
					payLoading.value = false
					uni.hideLoading()

					if (res.errMsg === 'requestPayment:fail cancel') {
						uni.showModal({
							showCancel: false,
							title: '提示',
							content: '支付失败',
							success: () => {
								orderListPage(0)
							}
						})
					} else orderListPage(-1)
				}
			})
		}
		// 订单列表页
		function orderListPage(state: number) {
			// 订单列表页,重新调用订单列表接口
			if (checkOrderListPage()) {
				emitter.emit('getOrderList')
				return
			}
			// 跳转订单列表页
			uni.reLaunch({
				url: `/pages-sub/order/order-list?state=${state}`
			})
		}
		
		return {
			orderInfo,
			setOrderInfo,
			setExtraInfoStore,
			extraInfo,
			selectStore,
			setSelectStore,
			payLoading,
			confirmOrder,
			handlePay
		}
	},
	{
	  persist: false,
	}
)